package com.csun.cmny.provider.service;

import com.csun.cmny.base.dto.LoginAuthDto;
import com.csun.cmny.core.support.IService;
import com.csun.cmny.provider.model.domain.DmcWatchConf;
import com.csun.cmny.provider.model.domain.DmcWatchData;
import com.csun.cmny.provider.model.dto.watch.*;

import java.util.List;

/**
 * @Auther: chisj chisj@foxmal.com
 * @Date: 2019-01-17 16:49
 * @Description: the interface dmc watch config service
 */
public interface DmcWatchConfigService extends IService<DmcWatchConf> {

    /**
     * query dmc watch config by device id
     *
     * @param deviceId  device id
     *
     * @return  the dmc watch conf by device id
     */
    DmcWatchConf queryDmcWatchConfigByDeviceId(Long deviceId);

    /**
     * set watch family number
     *
     * @param watchFamilyNumberDto  watch family number dto
     * @param loginAuthDto          login auth dto
     *
     * @return  the int
     */
    Integer setWatchFamilyNumber(WatchFamilyNumberDto watchFamilyNumberDto, LoginAuthDto loginAuthDto);

    /**
     * set watch heart upload rate
     *
     * @param watchHeartUploadRateDto dmc heart upload rate dto
     * @param loginAuthDto          login auth dto
     *
     * @return  the int
     */
    Integer setWatchHeartUploadRate(WatchHeartUploadRateDto watchHeartUploadRateDto, LoginAuthDto loginAuthDto);

    /**
     * set watch gps upload rate
     *
     * @param watchGpsUploadRateDto watch gps upload rate dto
     * @param loginAuthDto          login auth dto
     *
     * @return  the int
     */
    Integer setWatchGpsUploadRate(WatchGpsUploadRateDto watchGpsUploadRateDto, LoginAuthDto loginAuthDto);

    /**
     * set watch gps period
     *
     * @param watchPeriodDto    watch period dto
     * @param loginAuthDto      login auth dto
     *
     * @return the int
     */
    Integer setWatchGpsPeriod(WatchPeriodDto watchPeriodDto, LoginAuthDto loginAuthDto);

    /**
     * set watch power period
     *
     * @param watchPeriodDto    watch period dto
     * @param loginAuthDto      login auth dto
     *
     * @return the int
     */
    Integer setWatchPowerPeriod(WatchPeriodDto watchPeriodDto, LoginAuthDto loginAuthDto);

    /**
     * set watch power period
     *
     * @param watchPeriodDto    watch period dto
     * @param loginAuthDto      login auth dto
     *
     * @return the int
     */
    Integer setWatchBalancePeriod(WatchPeriodDto watchPeriodDto, LoginAuthDto loginAuthDto);

    /**
     * set watch time zone
     *
     * @param watchTimeZoneDto  watch time zone dto
     * @param loginAuthDto      login auth dto
     *
     * @return  the int
     */
    Integer setWatchTimeZone(WatchTimeZoneDto watchTimeZoneDto, LoginAuthDto loginAuthDto);

    /**
     * set watch gps switch
     *
     * @param watchSwitchDto    watch switch dto
     * @param loginAuthDto      login auth dto
     *
     * @return  the int
     */
    Integer setWatchGpsSwitch(WatchSwitchDto watchSwitchDto, LoginAuthDto loginAuthDto);

    /**
     * set watch white list switch
     *
     * @param watchSwitchDto    watch switch dto
     * @param loginAuthDto      login auth dto
     *
     * @return  the int
     */
    Integer setWatchWhiteListSwitch(WatchSwitchDto watchSwitchDto, LoginAuthDto loginAuthDto);

    /**
     * set watch yellow key sms switch
     *
     * @param watchSwitchDto    watch switch dto
     * @param loginAuthDto      login auth dto
     *
     * @return  the int
     */
    Integer setWatchYellowKeySmsSwitch(WatchSwitchDto watchSwitchDto, LoginAuthDto loginAuthDto);

    /**
     * set watch red key sms switch
     *
     * @param watchSwitchDto    watch switch dto
     * @param loginAuthDto      login auth dto
     *
     * @return  the int
     */
    Integer setWatchRedKeySmsSwitch(WatchSwitchDto watchSwitchDto, LoginAuthDto loginAuthDto);

    /**
     * set watch volume
     *
     * @param watchVolumeDto    watch volume dto
     * @param loginAuthDto      login auth dto
     *
     * @return  the int
     */
    Integer setWatchVolume(WatchVolumeDto watchVolumeDto, LoginAuthDto loginAuthDto);

    /**
     * query watch white list by device id
     *
     * @param deviceId  device id
     *
     * @return  the list by device id
     */
    List<String> queryWatchWhiteListByDeviceId(Long deviceId);

    /**
     * add watch white list phone
     *
     * @param addWatchWhiteListDto  add watch white list dto
     * @param loginAuthDto          login auth dto
     *
     * @return  the int
     */
    Integer addWatchWhiteListPhone(AddWatchWhiteListDto addWatchWhiteListDto,
                                   LoginAuthDto loginAuthDto);

    /**
     * edit watch white list phone
     *
     * @param editWatchWhiteListDto edit watch white list dto
     * @param loginAuthDto          login auth dto
     *
     * @return  the int
     */
    Integer editWatchWhiteListPhone(EditWatchWhiteListDto editWatchWhiteListDto,
                                    LoginAuthDto loginAuthDto);

    /**
     * delete watch white list phone
     *
     * @param deleteWatchWhiteListDto   delete watch white list dto
     * @param loginAuthDto              login auth dto
     *
     * @return  the int
     */
    Integer deleteWatchWhiteListPhone(DeleteWatchWhiteListDto deleteWatchWhiteListDto,
                                      LoginAuthDto loginAuthDto);

    /**
     * init dmc watch config
     *
     * @param deviceId  device id
     *
     * @return  the int.
     */
    Integer initDmcWatchConfig(Long deviceId);

    /**
     * remove dmc watch config
     *
     * @param deviceId  device id
     *
     * @return  the int
     */
    Integer removeDmcWatchConfig(Long deviceId);
}
